package com.dylan.历史.java8.lambda表达式;

import org.junit.Test;

import java.util.Comparator;
import java.util.function.BiFunction;
import java.util.function.Consumer;

/**
 * Created by Dylan on 2018/7/17.
 *
 * 方法引用三种主要的使用情况
 * 1. 对象::实例方法
 * 2. 类::静态方法
 * 3. 类::实例方法
 */
public class 方法引用 {

    @Test
    public void test1() {
        // 对象::实例方法
        Consumer<String> consumer1 = event -> System.out.println(event);
        Consumer<String> consumer2 = System.out::println;

        // 类::静态方法
        BiFunction<Integer, Integer, Integer> biFunction1 = (x, y) -> Math.max(x, y);
        BiFunction<Integer, Integer, Integer> biFunction2 = Math::max;

        // 类::实例方法
        // 第一个参数会成为执行方法的对象
        Comparator<String> comparator3 = (x,y) -> x.compareToIgnoreCase(y);
        Comparator<String> comparator4 = String::compareToIgnoreCase;

    }

    class Person {
        public void greet() {
            System.out.println("你好");
        }
    }

    class Greeter extends Person {
        public void greet() {
            // 使用super引用方法
//            Thread t1 = new Thread(() -> super.greet());
            Thread t1 = new Thread(super::greet);
            t1.start();

            // 使用this引用方法
            Thread t2 = new Thread(this::seeOut);
            t2.start();
        }

        public void seeOut() {
            System.out.println("欢迎下次再来");
        }
    }
}
